package cy.com.aspect;

import cy.com.annotation.RateLimiter;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * @ClassName : RateLimiterAspect
 * @Description : 限流切面
 * @Author : dengyc
 * @Date: 2020-12-02 16:27
 */
@Slf4j
@Aspect
@Component
public class RateLimiterAspect {

    private static final ConcurrentMap<String, RateLimiter> RATE_LIMITER_CACHE = new ConcurrentHashMap<>();

    /**
     * 切入点
     *
     * @within：用于匹配所以持有指定注解类型内的方法；
     * @target：用于匹配当前目标对象类型的执行方法，其中目标对象持有指定的注解；
     * @args：用于匹配当前执行的方法传入的参数持有指定注解的执行；
     * @annotation：用于匹配当前执行方法持有指定注解的方法；
     */
    @Pointcut(value = "@annotation(cy.com.annotation.RateLimiter)")
    public void rateLimit() {

    }
}
